<?php

namespace app\common\business;

use app\common\model\mysql\SysRoleDept;
use app\common\model\mysql\SysUserRole;

class DataAuth
{
    public function index($userId,$username,$dept_id,$whereA = []){
        // 假设userInfo中包含用户角色role
        $roleIds = (new SysUserRole())->getRoleIds($userId);
        // 初始化部门ID数组
        $deptIdWhere = $deptIdWhere1 = $deptIdWhere2 = $deptIdWhere3 = $where = $parentId = $deptTree = [];
        if($username === 'admin'){
            // 管理员可以查看所有部门，无需设置条件
        }else{
            $roleDataScope = (new \app\common\business\SysRole())->getRoleDataScope($roleIds);
            if(in_array(1, $roleDataScope)){
                // 无限制，可能不需要设置条件，或设置为空数组
            }
            if(in_array(2, $roleDataScope)){
                // 获取特定角色的部门ID
                $deptIdWhere1 = (new SysRoleDept())->getRoleDeptIdsArray($roleIds);
            }
            if(in_array(3, $roleDataScope)){
                // 只查看当前用户的部门
                $deptIdWhere2 = [intval($dept_id)];
                $map = [
                    'dept_id'=>$dept_id,
                ];
                $parentId = (new SysDept())->getFindNormalDept($map,'parent_id');
            }
            if(in_array(4, $roleDataScope)){
                // 获取当前部门及其子部门ID
                $deptIds = (new \app\common\business\SysDept())->deptIds($dept_id);
                // 合并当前部门和子部门ID，并确保是唯一的
                $deptIdWhere3 = array_merge([$dept_id], $deptIds);
            }
            $deptIdWhere = array_merge($deptIdWhere,$deptIdWhere1,$deptIdWhere2,$deptIdWhere3);
            // 如果deptIdWhere为空，则不添加where条件
            if (!empty($deptIdWhere)) {
                $deptIdWhere = array_keys(array_flip($deptIdWhere));
                $where[] = ['dept_id', 'in', $deptIdWhere];
            }
        }
        if($parentId){
            $deptTree = (new \app\common\model\mysql\SysDept())->getDeptTree($parentId['parent_id'],$deptIdWhere);
        }
        return array(
            'where'=>array_merge($where,$whereA),
            'deptTree'=>$deptTree,
            'deptIdWhere'=>$deptIdWhere,
        );
    }

    public function getUserDetails(){
        // 使用Request门面获取请求头中的access-token
        $accessToken = request()->header("access-token");
        // 构造缓存键名，使用config助手函数获取配置
        $cacheKey = config('redis.token_pre') . $accessToken;
        // 尝试从缓存中获取用户信息
        $userInfo = cache($cacheKey);
        // 检查用户信息是否存在
        if (!$userInfo) {
            // 返回空的用户信息数组或对象，这里使用数组
            return [
                'userName' => '',
                'userId' => '',
                'deptId' => '',
            ];
        }
        // 验证返回的用户信息是否包含必要的字段（这里假设已经验证）
        // 返回用户信息数组
        return [
            'userName' => $userInfo['username'],
            'userId' => $userInfo['id'],
            'deptId' => $userInfo['dept_id'],
        ];
    }
}
